/**
 * @name		jQuery Countdown Plugin
 * @author		Martin Angelov
 * @version 	1.0
 * @url			http://tutorialzine.com/2011/12/countdown-jquery/
 * @license		MIT License
 */

(function($){
	
	// Number of seconds in every time division
	var days	= 24*60*60,
		hours	= 60*60,
		minutes	= 60;
	
	// Creating the plugin
	$.fn.countdown = function(prop){
		
		var options = $.extend({
			callback	: function(){},
			timestamp	: 0
		},prop);
		
		var left, d, h, m, s, positions;

		// Initialize the plugin
		init(this, options);
		
		positions = this.find('.position .digit');
        var timer=null;
		(function tick(){
			
			// Time left
			left = Math.floor((options.timestamp - (new Date().getTime())) / 1000);
			if(left < 0){
				left = 0;
			}
			
			// Number of days left
			d = Math.floor(left / days);
			//updateDuo(0, 1, d);
            updatePosition(0,d);
			left -= d*days;
			
			// Number of hours left
			h = Math.floor(left / hours);
			//updateDuo(2, 3, h);
            updatePosition(1,h);
			left -= h*hours;
			
			// Number of minutes left
			m = Math.floor(left / minutes);
            updatePosition(2,m);
			//updateDuo(4, 5, m);
			left -= m*minutes;
			
			// Number of seconds left
			s = left;
            updatePosition(3,s);
			//updateDuo(6, 7, s);
			
			// Calling an optional user supplied callback
			options.callback(d, h, m, s);

			// Scheduling another call of this function in 1s
            if(timer){
                window.clearTimeout(timer);
            }
            timer=window.setTimeout(tick, 1000);
		})();

		// This function updates two digit positions at once
		function updateDuo(minor,major,value){
			switchDigit(positions.eq(minor),Math.floor(value/10)%10);
			switchDigit(positions.eq(major),value%10);
		}
        function updatePosition(index,value){
        	var $_pos=positions.eq(index),$_flip=$_pos.next(".runshadow");
        	var oldValue=$_pos.text();
        	$_pos.html(value);
           /* if(oldValue != value){
            	$_flip.addClass("wobble2");
            	//anim
            }else{
            	$_flip.removeClass("wobble2");
            }*/
           // switchDigit(positions.eq(index),value);
        }
		
		return this;
	};


	function init(elem, options){
		elem.addClass('countdownHolder');

		// Creating the markup inside the container
		$.each(['Days','Hours','Minutes','Seconds'],function(i,item){
            var typetext="";
            if(item=='Days'){
                typetext="days";
            }else if(item=='Hours'){
                typetext="hours";
            }else if(item=='Minutes'){
                typetext="mins";
            }else if(item=='Seconds'){
                typetext="secs";
            };

			$('<span class="counttype count'+this+'">').html(
				'<span class="position">'+
					'<span class="digit">0</span>'+
					'<span class="runshadow"></span>'+
				'</span>'+
                '<span class="typetext">'+typetext+'</span>'+
                 '<span class="line"></span>'
			).appendTo(elem);

			/*if(this!="Seconds"){
				elem.append('<span class="countDiv countDiv'+i+'"></span>');
			}*/
		});

	}

	// Creates an animated transition between the two numbers
	function switchDigit(position,number){
		
		var digit = position.find('.digit');
		
		if(digit.is(':animated')){
			return false;
		}
		
		if(position.data('digit') == number){
			// We are already showing this number
			return false;
		}
		
		position.data('digit', number);
		
		var replacement = $('<span>',{
			'class':'digit',
			css:{
				top:'-2.1em',
				opacity:0
			},
			html:number
		});
		
		// The .static class is added when the animation
		// completes. This makes it run smoother.
        //digit.before(replacement).removeClass('static').remove();
		digit.before(replacement).removeClass('static').animate({top:'2.5em',opacity:0},"fast",function(){
			digit.remove();
	    });

		replacement.animate({top:0,opacity:1},1000,function(){
				replacement.addClass('static');
			});
	}
})(jQuery);